/**
 * ************************************************************************
 *
 * @file    main.c
 * @brief   环形数组例程
 * @author  负号科技(fuhaokj@foxmail.com)
 * @version 0.1
 * @date    2023-08-03
 *
 * ************************************************************************
 *   __       _                 _    _
 *  / _|     | |               | |  (_)
 * | |_ _   _| |__   __ _  ___ | | ___
 * |  _| | | | '_ \ / _` |/ _ \| |/ / |
 * | | | |_| | | | | (_| | (_) |   <| |
 * |_|  \__,_|_| |_|\__,_|\___/|_|\_\ |
 *                                 _/ |
 *                                |__/
 *
 * @copyright Copyright (c) 2023 负号科技
 * For study and research only, no reprinting
 * ************************************************************************
 */
#include "main.h"

RingBuffer MPU_Body;

int main(void)
{
    RingBuffer_Init(&MPU_Body);
    UART_Init(); /*串口初始化并打开中断*/
    while (1)
    {
        /* code */
    }
}
#define MPU_Data_Length 10
uint8_t RX_DATA[MPU_Data_Length] = {0};

void USART_IRQHandler(void)
{
    uint8_t dat = 0, URXBuf_Cnt = 0,URXBuf_OK = 0;

    if (TFT_RX_ISR(&MPU_Body, dat) == 0) /*给数据入队 并判断队列是否以满*/
    {
        /*根据需求来选择需要的操作*/
        /*如果满队进行解析*/
        RingBuffer_Init(&MPU_Body); /*如果满队清空数组 采取满队不入队方式*/
        // memset(MPU_Body.Buffer, 0, sizeof(MPU_Body.Buffer));/*可不操作*/
    }
    if (MPU_Body.Length >= MPU_Data_Length * 2) /*环形数组缓冲区到达处理条件*/
    {
        /*到达处理条件进行解析*/
        while (1)
        {
            Read_RingBuffer(&MPU_Body, RX_DATA[URXBuf_Cnt]);
            URXBuf_Cnt++;
            if (RX_DATA[0] == 0xa4) /*帧头判断*/
            {
                if (URXBuf_Cnt > 1) /*防止帧头进入就被重新装填*/
                {
                    if (URXBuf_Cnt == MPU_Data_Length) /*到达判断条件*/
                    {
                        if (RX_DATA[0] == 0xa4 && RX_DATA[1] == 0x03 && RX_DATA[2] == 0x14 && RX_DATA[3] == 0x08) /*校验帧头*/
                        {
                            /*处理*/
                            URXBuf_OK = 1;
                        }
                        else
                        {
                            URXBuf_Cnt = 0; /*帧头错误重新填装数组*/
                        }
                    }
                }
            }
            else
            {
                URXBuf_Cnt = 0; /*帧头错误重新填装数组*/
            }

            if (URXBuf_OK == 1)
                break;
        }
    }
}
